from flask import Flask
from flask_cors import CORS
import config as cfg
#from control import FullDetect
from threading import Thread 
import time
import os
import signal

tableData= []

class Web:
    def __init__(self):
        self.app = Flask(__name__)
        CORS(self.app)
        # 这里默认的是get请求方式
        self.ReadFlag=False
        # AI识别结果：序号  垃圾名称  数量  OK/NO(投放结果)
        self.app.config['DetectResult'] = [0, 'None', 1, "OK"]
        # 自定义垃圾桶编号0、1、2、3
        self.app.config['isFull_Recyclable'] = [0, 0]    #定义：1为满载状态 0为非满载
        self.app.config['isFull_Harmful'] = [1, 0]
        self.app.config['isFull_Kitchen'] = [2, 0]
        self.app.config['isFull_Other'] = [3, 0] 
        self.app.config['GrabageQuantity'] = [0,0,0,0]  #各个垃圾桶垃圾数量
        self.GarbageNum=1
        @self.app.route('/GrabageType', methods=["GET"])
        def DetectResult():
        #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            if self.ReadFlag: 
                return "Already Read!!"
            self.ReadFlag=True
            return self.app.config['DetectResult']
        
        @self.app.route('/GrabageType10', methods=["GET"])
        def isFull_Recyclable():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return self.app.config['isFull_Recyclable']
        @self.app.route('/GrabageType11', methods=["GET"])
        def isFull_Harmful():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return self.app.config['isFull_Harmful']
        @self.app.route('/GrabageType12', methods=["GET"])
        def isFull_Kitchen():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return self.app.config['isFull_Kitchen']
        @self.app.route('/GrabageType13', methods=["GET"])
        def isFull_Other():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return self.app.config['isFull_Other']
        @self.app.route('/GrabageType2', methods=["GET"])
        def GrabageQuantity():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return self.app.config['GrabageQuantity']
        @self.app.route('/TableMessage', methods=["GET"])
        def TableMessage():
            #这里面就是你想要返回给前端的值， 切记，这里只能返回字符串，如果是个json数据，你的通过json.dumps(你的json数据)
            return tableData

    
    
    def NewData(self,name,val):
        if name in cfg.recycleableGarbage:
            self.app.config['GrabageQuantity'][0]+=val  #各个垃圾桶垃圾数量
        if name in cfg.harmfulGrabage:
            self.app.config['GrabageQuantity'][1]+=val  #各个垃圾桶垃圾数量
        if name in cfg.kitchenGarbage:
            self.app.config['GrabageQuantity'][2]+=val  #各个垃圾桶垃圾数量
        if name in cfg.anotherGrabage:
            self.app.config['GrabageQuantity'][3]+=val  #各个垃圾桶垃圾数量
        self.app.config['DetectResult'][0]+=val
        self.app.config['DetectResult'][1]=name
        type="可回收垃圾"
        if name in cfg.recycleableGarbage:
            type="可回收垃圾"
        if name in cfg.harmfulGrabage:
            type="有害垃圾"
        if name in cfg.kitchenGarbage:
            type="厨余垃圾"
        if name in cfg.anotherGrabage:
            type="其他垃圾"    
        
        tableData.append({"index":
                        str(self.GarbageNum),
                        "type":type,
                        "number": str(val),
                        "success": "OK!",
                        })        
        self.GarbageNum+=val
        self.ReadFlag=False
    
    # def UpateFullStatus(self,status):
    #     #status [0,0,0,0]
    #     self.app.config['isFull_Recyclable'][1] = status[0]
    #     self.app.config['isFull_Harmful'][1] = status[1]
    #     self.app.config['isFull_Kitchen'][1] = status[2]
    #     self.app.config['isFull_Other'][1]= status[3]

    def ResetFlag(self):
        self.ReadFlag=False
    def Run(self):
        self.app.run(host='127.0.0.1', port=1234,threaded=True)
    def Close(self):
        os.kill(os.getpid(), signal.SIGINT)
    

if __name__ == '__main__':
    web=Web()
    t1=Thread(target=web.Run)
    t1.start()
    
#    fd=FullDetect()
    # fd.Start()
    # t1=Thread(target=fd.RecData)
    # t1.start()
    try:
        while True:
            dat=fd.GetFullStatus()
            print(dat)
            web.UpateFullStatus(dat)
            time.sleep(1)
    except KeyboardInterrupt:
        web.Close()
        # fd.Stop()
        


